#include <sstream>
#include <string>

#include "EstrategiaHashMod.h"
#include "Clave.h"
#include "funciones.h"

namespace Toolkit
{

EstrategiaHashMod::EstrategiaHashMod() : EstrategiaHash()
{
}

EstrategiaHashMod::~EstrategiaHashMod()
{
}

//TODO: verificar
string EstrategiaHashMod::aplicar(const Clave &clave) const
{
	stringstream claveSerializada;
	clave.serializar(claveSerializada);

	int longitudClave = claveSerializada.str().size();
	const char *claveChar = claveSerializada.str().c_str();

	//transforma la longitud en un numero par
	if (longitudClave % 2 == 1)
	{
		longitudClave++;
	}

	int resultado = 0;
	for (int j = 0; j < longitudClave; j+=2)
	{
		resultado = (resultado + 100 * claveChar[j] + claveChar[j+1]) % 19937;
	}

	string resultadoString = intToStr(resultado, 5);

	return resultadoString;
}

}
